There are many tools available today which are capable of producing various types of graphical representations of source code. These include for example call charts which graphically illustrate which software functions call which other software functions, and dataflow diagrams which show the direct flow of data between software functions.
Existing tools are generally only capable of capturing relationships between software entities which are very direct such as the above-identified call and dataflow relationships. In many real time systems, there is operating system (OS) or application layer (AL) involvement in the exchange of data between software entities which tends to obscure the actual nature of the relationship between these entities. Messaging relationships are often examples of such obscured relationships. When a first entity sends a message to a second entity, there is usually no direct function call flow from the first entity to the second entity. Rather, the first entity writes the message by calling an OS or AL service, and this results in a number of OS or AL functions being run to enact the writing of the message. Then, the second entity reads the message by calling another OS or AL service, and this in turn results in a number of OS or AL functions being run to enact the reading of the message. Even while there is clearly a definite relationship between the first and second entity, existing tools are unable to detect or capture this in any meaningful way. This is firstly due to the fact that most of the time OS and AL source code is not available for analysis. This is due secondly to the fact that even if it were possible to use existing tools to view the source code of the OS and AL functions being called, at the highest level of granularity the call flows on either side (read and write) in most cases would not meet. For those cases where they do meet, the hierarchy of OS and AL calls would make it difficult to identify the real nature of the relationship, namely that of a message being passed from the first entity to the second entity.